package com.alibaba.dubbo.dynamic.service;

import com.alibaba.dubbo.dynamic.config.DynamicExportConfig;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * Created by wuyu on 2016/8/5.
 */
public interface DynamicExportService {

    /**
     * @param jars     远程jar包
     * @param services id    bean id
     *                 iFaceClazzName 接口全名
     *                 implClazzName 实现类全名
     *                 group 所属组
     *                 version 服务版本
     *                 timeout 服务超时
     *                 filter 过滤器
     *                 <p>
     *                 renewClassLoader 是否使用新的类加载器
     *                 功能待定:需解决ClassPool已经加载过的类.
     *                 true 使用上次的类加载器,
     *                 优点
     *                 可以使用上次动态发布的bean
     *                 缺点
     *                 不可以热替换动态发布的bean
     *                 false 使用新的类加载器
     *                 优点
     *                 由于处于不同的类加载其中,可以对动态发布的bean热替换
     *                 缺点
     *                 不能使用,上次动态发布的bean
     *                 </p>
     * @return
     */
    public <T> Map<String, Object> export(List<String> jars, List<DynamicExportConfig> services);

    /**
     * @param jars    远端jar包
     * @param beanMap bean id:classname
     */
    public Map<String, String> registerSpringBean(List<String> jars, Map<String, String> beanMap);

    /**
     * @param code java code
     */
    public void compile(String code);

    /**
     * @param code java 代码
     * @param id   bean id
     */
    public void compileWithRegistererSpring(String code, String id);

    /**
     * 列出所有动态注册bean
     *
     * @return
     */
    public List<Map<String, Object>> listDynamicBean();


    /**
     * 卸载服务
     *
     * @param ids bean id
     */
    public void unexport(List<String> ids);


    /**
     * 读取log日志, com.alibaba.dubbo.common.logger.LoggerFactory
     * 暂只支持 jcl jdk log4j slf4j 并且需要开启 log file
     *
     * @param index
     * @param limitLines
     * @return
     */
    public Map<String, Object> readLog(Long index, Integer limitLines) throws IOException;


    /**
     * 获取系统信息 , java内存使用情况
     * @return
     */
    public Map<String, Object> systemInfo();
}
